<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index06-函数</title>
</head>
<body>
<script type="text/javascript">
    // js中函数当成一等公民，函数即可以完成某功能，也可以看成值
    // 声明一个函数并调用
    // function fun(){
    //     console.log("我的第一个函数");
    // }
    // fun();
    // var result = fun();
    // console.log(result);

    // 定义带有参数的函数
    // function fun(a, b, c) {
    //     console.log(a);
    //     console.log(b);
    //     console.log(c);
    // }
    // fun(10, 20);
    // fun(10, 20, 30);

    // js中函数没有重载的概念
    // function f1(a, b){
    //     console.log('111111111');
    //     console.log(a);
    //     console.log(b);
    // }
    //
    // // 第二个函数将第一个定义f1函数覆盖了
    // function f1(a, b, c){
    //     console.log("22222222222");
    //     console.log(a);
    //     console.log(b);
    //     console.log(c);
    // }
    // f1(10, 20);
    // f1(10, 20, 30);
    // f1(10, 20, 30, 40);

    // 在js中真正接收参数的不是形参列表，通过函数的中一个隐藏的对象arguments数组来接收实际参数
    // function f1(){
    //     console.log(arguments);
    //     for (var i = 0; i < arguments.length; i++) {
    //         console.log(arguments[i]);
    //     }
    // }
    // f1(10, 20, 30);

    // 定义函数求和
    // function f1(a, b){
    //     var c = a + b;
    //     return c;
    // }
    // var result = f1(10, 20);
    // console.log(result);
    // function f1(){
    //     var sum = 0;
    //     for (var i = 0; i< arguments.length; i++) {
    //         sum += arguments[i];
    //     }
    //     return sum;
    // }
    // console.log(f1(10, 20, 30));
    // console.log(f1(10, 20, 30, 40, 50));

    // 函数本身也可以看成值
    // function fun2(){
    //     console.log("fun2")
    // }
    // // callback——回调函数
    // function f1(cb){
    //     console.log("f1");
    //     // console.log(fun);
    //     // 在f1中调用了传进来的fun函数
    //     // fun();
    //     // 在调用fun之前需要判断类型
    //     if (typeof(cb) === 'function') {
    //         cb();
    //     } else {
    //         console.log(cb);
    //     }
    // }
    // f1(1);
    // f1(fun2);

    // 函数表达式
    // var fun = function(){
    //     console.log("函数表达式");
    // };
    // fun();
    // var fun = function(a, b){
    //     console.log(a, b);
    //     return a + b;
    // };
    // var result = fun(10, 20);
    // console.log(result);

    // 自执行函数
    // (function(){
    //     console.log("自执行函数");
    // })();
    // (function(a, b){
    //     console.log("自执行函数");
    //     console.log(a, b);
    // })(10, 20);

    // fun1();
    // function fun1(){
    //     console.log("fun1");
    // }
    // fun1();
    // fun2();
    // var fun2 = function(){
    //     console.log("fun2")
    // };
    // fun2();

    // 用递归来完成5!=5*4*3*2*1<====>5 * 4!

    // function f(n){
    //     if (n == 1 || n == 0) {
    //         // 递归的出口
    //         return 1;
    //     }
    //     return n * f(n - 1);
    // }
    // var result = f(5);
    // console.log(result);

    // 回调函数
    // function fun2(){
    //     console.log("回调函数")
    // }
    // function f(cb){
    //     console.log("f");
    //     cb();
    // }
    // f(function(){
    //     console.log("回调函数2");
    // });

    // 函数声明
    // function f(){
    //
    // }
    // 函数表达式
    // var fun = function(){};
    // 创建函数对象
    // var fun = new Function("a", "b", "return a + b");
    // var result = fun(10, 20);
    // console.log(result);
</script>
</body>
</html>